package web

import (
	log "github.com/sirupsen/logrus"
	"github.com/spf13/viper"
	// 使用标准库
	"net/http"
	"sync"
)
// HttpServer 可以添加新的功能
type HttpServer struct {
	isStart bool
}

var hs *HttpServer
// 单例模式，保证只初始化一次
var once sync.Once

func RunHttpServer() {
	if hs.isStart == true {
		return
	}
	hs.isStart = true
	// 开启监听   这里监听就是指监听并服务ListenAndServe方法
	hs.Watch()
}

func New() {
	once.Do(func() {
		hs = new(HttpServer)
	})
}

// Watch http监听
func (s *HttpServer) Watch() {
	r := Route{}
	r.LoadController()

	// 开启HTTP服务
	s.runHttpServer()
}

// 运行http服务
func (s *HttpServer) runHttpServer() {
	log.Info("===========    开启HTTP服务    ===========")

	// 组装监听地址，需要从配置中获取host,port信息
	httpHost := s.getHttpHost()
	// 开启服务，使用ListenAndServe(Addr, handler)
	err := http.ListenAndServe(httpHost, nil)
	if err != nil {
		log.Panic("[http]http服务启动失败", httpHost, err)
	}
}

// 组装http的host监听地址
func (s *HttpServer) getHttpHost() string {
	host := viper.GetString("http.host")
	port := viper.GetString("http.port")

	if host == "" {
		host = "127.0.0.1"
	}
	if port == "" {
		port = "8000"
	}
	return host + ":" + port

}
